home *** CD-ROM | disk | FTP | other *** search
/ SuperHack / SuperHack CD.bin / CODING / SOUND / CRYS270.ZIP / CRYSOVL.ASM < prev    next >
Encoding:
Assembly Source File  |  1995-06-26  |  2.1 KB  |  125 lines

  1. ;****************************************************************************
  2. ;*    Module contenant des fonctions DOS de base pour lire un overlay
  3. ;*    ATTENTION toutes ces fonctions sont de type NEAR
  4. ;*
  5. ;* Programmé par Sébastien Granjoux
  6. ;* Commencé le 19/02/95
  7. ;* Modification le 19/02/95
  8.  
  9. IDEAL
  10.  
  11. INCLUDE "CRYSLOAD.INC"
  12.  
  13. PUBLIC    USEOVL
  14.  
  15. SEGMENT CSEG PARA PUBLIC USE16 'CODE'
  16.  
  17. ASSUME    cs:CSEG
  18.  
  19. UseOvl:
  20.     FILESYS <OFFSET openovl,OFFSET closeovl,OFFSET seekovl,OFFSET readovl>
  21.  
  22. Handle    DW    -1
  23.  
  24. ;***************************************************************************
  25. ;*    Ouvre un fichier en mode lecture, ATTENTION il ne peut y avoir
  26. ;*    qu'un seul fichier ouvert en même temps
  27. ;*
  28. ;* Entrée:
  29. ;*    DS:DX    position dans l'overlay du fichier
  30. ;*
  31. ;* Sortie:
  32. ;*    AX    erreur si C=1
  33.  
  34. PROC    openovl
  35.  
  36.     mov    ah,51h
  37.     int    21h
  38.     jc    @@error
  39.     push    dx
  40.     push    ds
  41.     push    es
  42.     push    di
  43.     mov    ds,bx
  44.     mov    ax,[ds:2Ch]
  45.     mov    ds,ax
  46.     mov    es,ax
  47.     xor    di,di
  48.     mov    cx,0ffffh
  49.     xor    al,al
  50. @@next_envstr:
  51.     repne    scasb
  52.     scasb
  53.     jne    @@next_envstr
  54.     scasw
  55.     mov    dx,di
  56.     pop    di
  57.     pop    es
  58.     mov        ax,3d00h
  59.     int    21h
  60.     pop     cx
  61.     pop     dx
  62.     jc    @@error
  63.     mov    [cs:Handle],ax
  64.     mov    bx,ax
  65.     mov    ax,4200h
  66.     int    21h
  67. @@error:
  68.     ret
  69. ENDP
  70.  
  71. ;***************************************************************************
  72. ;*    Lit un block d'octet dans un overlay précédament ouvert
  73. ;*
  74. ;* Entrée:
  75. ;*    CX    nombre d'octet à lire
  76. ;*    DS:DX    adresse du buffer recevant les données
  77. ;*
  78. ;* Sortie:
  79. ;*    AX    erreur si C=1
  80.  
  81. PROC    readovl
  82.  
  83.     mov    bx,[cs:Handle]
  84.     mov    ah,3Fh
  85.     int    21h
  86.     ret
  87.  
  88. ENDP
  89.  
  90. ;***************************************************************************
  91. ;*    Se déplace dans l'overlay par rapport à la position courante
  92. ;*
  93. ;* Entrée:
  94. ;*      CX:DX    nouvelle position dans l'overlay
  95. ;*
  96. ;* Sortie:
  97. ;*    AX    erreur si C=1
  98.  
  99. PROC    seekovl
  100.  
  101.     mov    ax,4201h
  102.     mov    bx,[cs:Handle]
  103.     int    21h
  104.     ret
  105.  
  106. ENDP
  107.  
  108. ;***************************************************************************
  109. ;*    Ferme l'overlay ouvert précédament
  110. ;*
  111. ;* Sortie:
  112. ;*    AX    erreur si C=1
  113.  
  114. PROC    closeovl
  115.  
  116.     mov    ah,3eh
  117.     mov    bx,[cs:Handle]
  118.     int    21h
  119.     ret
  120.  
  121. ENDP
  122.  
  123. ENDS
  124.  
  125. END